#ifndef CONVERSATIONPAGE_H
#define CONVERSATIONPAGE_H

#include <QWidget>
#include <QListWidget>
#include <QLineEdit>
#include <QPushButton>
#include <QLabel>

namespace Ui {
class ConversationPage;
}

/**
 * @brief 会话页面类，处理单聊和群聊的消息交互
 */
class ConversationPage : public QWidget
{
    Q_OBJECT

public:
    /**
     * @brief 构造函数，初始化会话页面
     * @param parent 父窗口指针
     */
    explicit ConversationPage(QWidget *parent = nullptr);

    /**
     * @brief 析构函数，释放资源
     */
    ~ConversationPage();

    /**
     * @brief 设置会话信息
     * @param targetId 目标ID（好友ID或群聊ID）
     * @param targetName 目标名称
     * @param isGroup 是否为群聊
     * @param userId 当前用户ID
     */
    void setConversationInfo(const QString &targetId, const QString &targetName, bool isGroup, const QString &userId);

    /**
     * @brief 添加消息到会话
     * @param senderId 发送者ID
     * @param senderName 发送者名称
     * @param content 消息内容
     * @param time 发送时间
     * @param isSelf 是否为当前用户发送
     */
    void addMessage(const QString &senderId, const QString &senderName, const QString &content,
                    const QString &time, bool isSelf);

signals:
    /**
     * @brief 返回上一级页面信号
     */
    void back();

    /**
     * @brief 发送消息信号
     * @param targetId 目标ID
     * @param content 消息内容
     * @param isGroup 是否为群聊
     */
    void sendMessage(const QString &targetId, const QString &content, bool isGroup);

private slots:
    /**
     * @brief 返回按钮点击事件处理
     */
    void onBackClicked();

    /**
     * @brief 发送按钮点击事件处理
     */
    void onSendClicked();

    /**
     * @brief 输入框回车事件处理
     */
    void onReturnPressed();

private:
    Ui::ConversationPage *ui;         ///< UI对象指针
    QString m_targetId;               ///< 目标ID
    QString m_targetName;             ///< 目标名称
    QString m_userId;                 ///< 当前用户ID
    bool m_isGroup;                   ///< 是否为群聊

    QLabel *m_titleLabel;             ///< 会话标题标签
    QListWidget *m_messageList;       ///< 消息列表控件
    QLineEdit *m_inputEdit;           ///< 消息输入框
    QPushButton *m_sendBtn;           ///< 发送按钮
    QPushButton *m_backBtn;           ///< 返回按钮

    /**
     * @brief 初始化UI组件
     */
    void initUI();

    /**
     * @brief 验证消息输入
     * @return 验证通过返回true，否则返回false
     */
    bool validateInput();

    /**
     * @brief 滚动到最新消息
     */
    void scrollToLatestMessage();
};

#endif // CONVERSATIONPAGE_H

